<?php

/**
 * Авторизаційний контроллер. Забезпечує авторизацію та реєстрацію користувачів
 *
 */
class Auth_Controller extends Controller_Main
{
    protected $_redirectToAuth = 'auth';
    protected $_redirectAfterAuth = '/';

    /**
     * Права для доступу (не використовуються)
     *
     * @var int
     */
    protected $_accessRights = 0;

    /**
     * Перевіряє чи авторизований користувач
     * Якщо ні - робота припиняється і користувачу надається
     * форма для авторизації або реєстрації
     * 
     * @see Zend_Controller_Action::init()
     */
    public function init()
    {
        $zendAuth = Zend_Auth::getInstance();
        $action = $this->getRequest()->getActionName();
        if ( $action != 'auth') {
            if ( $zendAuth->hasIdentity() === false ) {
                if($this->getRequest()->getActionName() != 'exit'){
                    $url = new Zend_Session_Namespace('Authentication');
                    $url->backUrl = $this->getFrontController()->getRequest()->getPathInfo();
                }
                $this->_helper->redirector($this->_redirectToAuth);
                throw new Zend_Exception('[NEED_TO_AUTH]');
            }
        } elseif( $action == 'auth' && $zendAuth->hasIdentity()) {
            $this->_forward('exit');
        }
        parent::init();
    }

    /**
     * дія для авторизації
     */
    public function authAction()
    {
        $this->_helper->viewRenderer->setNoRender();
        $form = new Auth_Form();
        if ($this->getRequest()->isPost()) {
            try {
                if ($form->isValid($this->getRequest()->getPost()) === false)
                    throw new Exception ('[ERROR_AUTH_SIGNIN]');
                $login = $form->login->getValue();
                $password = $form->password->getValue();

                $auth = Zend_Auth::getInstance();
                $result = $auth->authenticate(new Auth_Adapter($login, $password));
                if ($result->isValid() === false) {
                    Auth_Adapter::sleep();
                    throw new Exception ( '[ERROR_AUTH_SIGNIN]' );
                }
                $url = new Zend_Session_Namespace('Authentication');
                if (isset($url->backUrl)) {
                    $backUrl = $url->backUrl;
                    unset($url->backUrl);
                    $this->_redirect($backUrl);
                }
                else {
                    $this->_redirect($this->_redirectAfterAuth);
                }
            }
            catch ( Exception $e ) {
                $this->view->error = $e->getMessage();
            }
        }
        else {
            $this->view->error = '[ERROR_NOT_POST]';
        }
        $this->_helper->layout->setLayout('auth');
        $this->view->authForm = $form;
    }   

    /**
     * дія виходу
     */
    public function exitAction() {
        Zend_Auth::getInstance()->clearIdentity();
        $this->_helper->redirector($this->_redirectToAuth);
    }
}